package com.sakura.hk.sakura.springboot.plugin.tool;

import com.sakura.hk.sakura.springboot.plugin.model.ClassJavaFileManager;
import com.sakura.hk.sakura.springboot.plugin.model.ClassJavaFileObject;
import com.sakura.hk.sakura.springboot.plugin.model.StringObject;

import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 得到class byte[]
 *
 * @Author: 贺坤
 * @Date: 2021/7/15 14:15
 */
public class GenerateClassBytes {
    /**
     * 默认的启动类class文件字节码
     */
    public static final byte[] DEFAULT_MAIN_CLASS = new byte[]{(byte)0xca,(byte)0xfe,(byte)0xba,(byte)0xbe,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x34,(byte)0x00,(byte)0x74,(byte)0x0a,(byte)0x00,(byte)0x19,(byte)0x00,(byte)0x30,(byte)0x07,(byte)0x00,(byte)0x31,(byte)0x0a,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x30,(byte)0x08,(byte)0x00,(byte)0x32,(byte)0x0a,(byte)0x00,(byte)0x33,(byte)0x00,(byte)0x34,(byte)0x08,(byte)0x00,(byte)0x35,(byte)0x08,(byte)0x00,(byte)0x36,(byte)0x08,(byte)0x00,(byte)0x37,(byte)0x07,(byte)0x00,(byte)0x38,(byte)0x0a,(byte)0x00,(byte)0x09,(byte)0x00,(byte)0x39,(byte)0x0a,(byte)0x00,(byte)0x09,(byte)0x00,(byte)0x3a,(byte)0x0a,(byte)0x00,(byte)0x09,(byte)0x00,(byte)0x3b,(byte)0x12,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x40,(byte)0x0a,(byte)0x00,(byte)0x09,(byte)0x00,(byte)0x41,(byte)0x09,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x42,(byte)0x07,(byte)0x00,(byte)0x43,(byte)0x09,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x44,(byte)0x0a,(byte)0x00,(byte)0x09,(byte)0x00,(byte)0x45,(byte)0x0a,(byte)0x00,(byte)0x46,(byte)0x00,(byte)0x47,(byte)0x0a,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x48,(byte)0x0a,(byte)0x00,(byte)0x33,(byte)0x00,(byte)0x49,(byte)0x0a,(byte)0x00,(byte)0x19,(byte)0x00,(byte)0x4a,(byte)0x08,(byte)0x00,(byte)0x4b,(byte)0x0a,(byte)0x00,(byte)0x4c,(byte)0x00,(byte)0x4d,(byte)0x07,(byte)0x00,(byte)0x4e,(byte)0x01,(byte)0x00,(byte)0x0c,(byte)0x66,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x4c,(byte)0x69,(byte)0x73,(byte)0x74,(byte)0x55,(byte)0x72,(byte)0x6c,(byte)0x73,(byte)0x01,(byte)0x00,(byte)0x0f,(byte)0x5b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x2f,(byte)0x55,(byte)0x52,(byte)0x4c,(byte)0x3b,(byte)0x01,(byte)0x00,(byte)0x08,(byte)0x66,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x4c,(byte)0x69,(byte)0x73,(byte)0x74,(byte)0x01,(byte)0x00,(byte)0x0f,(byte)0x5b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x69,(byte)0x6f,(byte)0x2f,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x3b,(byte)0x01,(byte)0x00,(byte)0x06,(byte)0x3c,(byte)0x69,(byte)0x6e,(byte)0x69,(byte)0x74,(byte)0x3e,(byte)0x01,(byte)0x00,(byte)0x03,(byte)0x28,(byte)0x29,(byte)0x56,(byte)0x01,(byte)0x00,(byte)0x04,(byte)0x43,(byte)0x6f,(byte)0x64,(byte)0x65,(byte)0x01,(byte)0x00,(byte)0x0f,(byte)0x4c,(byte)0x69,(byte)0x6e,(byte)0x65,(byte)0x4e,(byte)0x75,(byte)0x6d,(byte)0x62,(byte)0x65,(byte)0x72,(byte)0x54,(byte)0x61,(byte)0x62,(byte)0x6c,(byte)0x65,(byte)0x01,(byte)0x00,(byte)0x04,(byte)0x6d,(byte)0x61,(byte)0x69,(byte)0x6e,(byte)0x01,(byte)0x00,(byte)0x16,(byte)0x28,(byte)0x5b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x3b,(byte)0x29,(byte)0x56,(byte)0x01,(byte)0x00,(byte)0x0d,(byte)0x53,(byte)0x74,(byte)0x61,(byte)0x63,(byte)0x6b,(byte)0x4d,(byte)0x61,(byte)0x70,(byte)0x54,(byte)0x61,(byte)0x62,(byte)0x6c,(byte)0x65,(byte)0x07,(byte)0x00,(byte)0x31,(byte)0x07,(byte)0x00,(byte)0x4f,(byte)0x07,(byte)0x00,(byte)0x38,(byte)0x01,(byte)0x00,(byte)0x0a,(byte)0x45,(byte)0x78,(byte)0x63,(byte)0x65,(byte)0x70,(byte)0x74,(byte)0x69,(byte)0x6f,(byte)0x6e,(byte)0x73,(byte)0x07,(byte)0x00,(byte)0x50,(byte)0x01,(byte)0x00,(byte)0x11,(byte)0x63,(byte)0x72,(byte)0x65,(byte)0x61,(byte)0x74,(byte)0x65,(byte)0x43,(byte)0x6c,(byte)0x61,(byte)0x73,(byte)0x73,(byte)0x4c,(byte)0x6f,(byte)0x61,(byte)0x64,(byte)0x65,(byte)0x72,(byte)0x01,(byte)0x00,(byte)0x28,(byte)0x28,(byte)0x5b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x2f,(byte)0x55,(byte)0x52,(byte)0x4c,(byte)0x3b,(byte)0x29,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x43,(byte)0x6c,(byte)0x61,(byte)0x73,(byte)0x73,(byte)0x4c,(byte)0x6f,(byte)0x61,(byte)0x64,(byte)0x65,(byte)0x72,(byte)0x3b,(byte)0x01,(byte)0x00,(byte)0x0d,(byte)0x6c,(byte)0x61,(byte)0x6d,(byte)0x62,(byte)0x64,(byte)0x61,(byte)0x24,(byte)0x6d,(byte)0x61,(byte)0x69,(byte)0x6e,(byte)0x24,(byte)0x30,(byte)0x01,(byte)0x00,(byte)0x23,(byte)0x28,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x69,(byte)0x6f,(byte)0x2f,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x3b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x3b,(byte)0x29,(byte)0x5a,(byte)0x01,(byte)0x00,(byte)0x0a,(byte)0x53,(byte)0x6f,(byte)0x75,(byte)0x72,(byte)0x63,(byte)0x65,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x01,(byte)0x00,(byte)0x0f,(byte)0x4d,(byte)0x79,(byte)0x4c,(byte)0x61,(byte)0x75,(byte)0x6e,(byte)0x63,(byte)0x68,(byte)0x65,(byte)0x72,(byte)0x2e,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x0c,(byte)0x00,(byte)0x1e,(byte)0x00,(byte)0x1f,(byte)0x01,(byte)0x00,(byte)0x1f,(byte)0x63,(byte)0x6f,(byte)0x6d,(byte)0x2f,(byte)0x73,(byte)0x61,(byte)0x6b,(byte)0x75,(byte)0x72,(byte)0x61,(byte)0x2f,(byte)0x68,(byte)0x6b,(byte)0x2f,(byte)0x70,(byte)0x6c,(byte)0x75,(byte)0x67,(byte)0x69,(byte)0x6e,(byte)0x2f,(byte)0x4d,(byte)0x79,(byte)0x4c,(byte)0x61,(byte)0x75,(byte)0x6e,(byte)0x63,(byte)0x68,(byte)0x65,(byte)0x72,(byte)0x01,(byte)0x00,(byte)0x12,(byte)0x73,(byte)0x61,(byte)0x6b,(byte)0x75,(byte)0x72,(byte)0x61,(byte)0x2e,(byte)0x70,(byte)0x6c,(byte)0x75,(byte)0x67,(byte)0x69,(byte)0x6e,(byte)0x2e,(byte)0x70,(byte)0x61,(byte)0x74,(byte)0x68,(byte)0x07,(byte)0x00,(byte)0x51,(byte)0x0c,(byte)0x00,(byte)0x52,(byte)0x00,(byte)0x53,(byte)0x01,(byte)0x00,(byte)0x08,(byte)0x75,(byte)0x73,(byte)0x65,(byte)0x72,(byte)0x2e,(byte)0x64,(byte)0x69,(byte)0x72,(byte)0x01,(byte)0x00,(byte)0x12,(byte)0x73,(byte)0x61,(byte)0x6b,(byte)0x75,(byte)0x72,(byte)0x61,(byte)0x2e,(byte)0x70,(byte)0x6c,(byte)0x75,(byte)0x67,(byte)0x69,(byte)0x6e,(byte)0x2e,(byte)0x6e,(byte)0x61,(byte)0x6d,(byte)0x65,(byte)0x01,(byte)0x00,(byte)0x08,(byte)0x6d,(byte)0x79,(byte)0x50,(byte)0x6c,(byte)0x75,(byte)0x67,(byte)0x69,(byte)0x6e,(byte)0x01,(byte)0x00,(byte)0x0c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x69,(byte)0x6f,(byte)0x2f,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x0c,(byte)0x00,(byte)0x1e,(byte)0x00,(byte)0x54,(byte)0x0c,(byte)0x00,(byte)0x1e,(byte)0x00,(byte)0x55,(byte)0x0c,(byte)0x00,(byte)0x56,(byte)0x00,(byte)0x57,(byte)0x01,(byte)0x00,(byte)0x10,(byte)0x42,(byte)0x6f,(byte)0x6f,(byte)0x74,(byte)0x73,(byte)0x74,(byte)0x72,(byte)0x61,(byte)0x70,(byte)0x4d,(byte)0x65,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x64,(byte)0x73,(byte)0x0f,(byte)0x06,(byte)0x00,(byte)0x58,(byte)0x10,(byte)0x00,(byte)0x2d,(byte)0x0f,(byte)0x06,(byte)0x00,(byte)0x59,(byte)0x0c,(byte)0x00,(byte)0x5a,(byte)0x00,(byte)0x5b,(byte)0x0c,(byte)0x00,(byte)0x5c,(byte)0x00,(byte)0x5d,(byte)0x0c,(byte)0x00,(byte)0x1c,(byte)0x00,(byte)0x1d,(byte)0x01,(byte)0x00,(byte)0x0c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x2f,(byte)0x55,(byte)0x52,(byte)0x4c,(byte)0x0c,(byte)0x00,(byte)0x1a,(byte)0x00,(byte)0x1b,(byte)0x0c,(byte)0x00,(byte)0x5e,(byte)0x00,(byte)0x5f,(byte)0x07,(byte)0x00,(byte)0x60,(byte)0x0c,(byte)0x00,(byte)0x61,(byte)0x00,(byte)0x62,(byte)0x0c,(byte)0x00,(byte)0x63,(byte)0x00,(byte)0x23,(byte)0x0c,(byte)0x00,(byte)0x64,(byte)0x00,(byte)0x65,(byte)0x0c,(byte)0x00,(byte)0x2a,(byte)0x00,(byte)0x2b,(byte)0x01,(byte)0x00,(byte)0x04,(byte)0x2e,(byte)0x6a,(byte)0x61,(byte)0x72,(byte)0x07,(byte)0x00,(byte)0x4f,(byte)0x0c,(byte)0x00,(byte)0x66,(byte)0x00,(byte)0x67,(byte)0x01,(byte)0x00,(byte)0x2b,(byte)0x6f,(byte)0x72,(byte)0x67,(byte)0x2f,(byte)0x73,(byte)0x70,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x66,(byte)0x72,(byte)0x61,(byte)0x6d,(byte)0x65,(byte)0x77,(byte)0x6f,(byte)0x72,(byte)0x6b,(byte)0x2f,(byte)0x62,(byte)0x6f,(byte)0x6f,(byte)0x74,(byte)0x2f,(byte)0x6c,(byte)0x6f,(byte)0x61,(byte)0x64,(byte)0x65,(byte)0x72,(byte)0x2f,(byte)0x4a,(byte)0x61,(byte)0x72,(byte)0x4c,(byte)0x61,(byte)0x75,(byte)0x6e,(byte)0x63,(byte)0x68,(byte)0x65,(byte)0x72,(byte)0x01,(byte)0x00,(byte)0x10,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x01,(byte)0x00,(byte)0x13,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x45,(byte)0x78,(byte)0x63,(byte)0x65,(byte)0x70,(byte)0x74,(byte)0x69,(byte)0x6f,(byte)0x6e,(byte)0x01,(byte)0x00,(byte)0x10,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x79,(byte)0x73,(byte)0x74,(byte)0x65,(byte)0x6d,(byte)0x01,(byte)0x00,(byte)0x0b,(byte)0x67,(byte)0x65,(byte)0x74,(byte)0x50,(byte)0x72,(byte)0x6f,(byte)0x70,(byte)0x65,(byte)0x72,(byte)0x74,(byte)0x79,(byte)0x01,(byte)0x00,(byte)0x26,(byte)0x28,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x3b,(byte)0x29,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x3b,(byte)0x01,(byte)0x00,(byte)0x15,(byte)0x28,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x3b,(byte)0x29,(byte)0x56,(byte)0x01,(byte)0x00,(byte)0x23,(byte)0x28,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x69,(byte)0x6f,(byte)0x2f,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x3b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x3b,(byte)0x29,(byte)0x56,(byte)0x01,(byte)0x00,(byte)0x06,(byte)0x65,(byte)0x78,(byte)0x69,(byte)0x73,(byte)0x74,(byte)0x73,(byte)0x01,(byte)0x00,(byte)0x03,(byte)0x28,(byte)0x29,(byte)0x5a,(byte)0x0a,(byte)0x00,(byte)0x68,(byte)0x00,(byte)0x69,(byte)0x0a,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x6a,(byte)0x01,(byte)0x00,(byte)0x06,(byte)0x61,(byte)0x63,(byte)0x63,(byte)0x65,(byte)0x70,(byte)0x74,(byte)0x01,(byte)0x00,(byte)0x1a,(byte)0x28,(byte)0x29,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x69,(byte)0x6f,(byte)0x2f,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x6e,(byte)0x61,(byte)0x6d,(byte)0x65,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x74,(byte)0x65,(byte)0x72,(byte)0x3b,(byte)0x01,(byte)0x00,(byte)0x09,(byte)0x6c,(byte)0x69,(byte)0x73,(byte)0x74,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x73,(byte)0x01,(byte)0x00,(byte)0x29,(byte)0x28,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x69,(byte)0x6f,(byte)0x2f,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x6e,(byte)0x61,(byte)0x6d,(byte)0x65,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x74,(byte)0x65,(byte)0x72,(byte)0x3b,(byte)0x29,(byte)0x5b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x69,(byte)0x6f,(byte)0x2f,(byte)0x46,(byte)0x69,(byte)0x6c,(byte)0x65,(byte)0x3b,(byte)0x01,(byte)0x00,(byte)0x05,(byte)0x74,(byte)0x6f,(byte)0x55,(byte)0x52,(byte)0x49,(byte)0x01,(byte)0x00,(byte)0x10,(byte)0x28,(byte)0x29,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x2f,(byte)0x55,(byte)0x52,(byte)0x49,(byte)0x3b,(byte)0x01,(byte)0x00,(byte)0x0c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x2f,(byte)0x55,(byte)0x52,(byte)0x49,(byte)0x01,(byte)0x00,(byte)0x05,(byte)0x74,(byte)0x6f,(byte)0x55,(byte)0x52,(byte)0x4c,(byte)0x01,(byte)0x00,(byte)0x10,(byte)0x28,(byte)0x29,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6e,(byte)0x65,(byte)0x74,(byte)0x2f,(byte)0x55,(byte)0x52,(byte)0x4c,(byte)0x3b,(byte)0x01,(byte)0x00,(byte)0x06,(byte)0x6c,(byte)0x61,(byte)0x75,(byte)0x6e,(byte)0x63,(byte)0x68,(byte)0x01,(byte)0x00,(byte)0x09,(byte)0x61,(byte)0x72,(byte)0x72,(byte)0x61,(byte)0x79,(byte)0x63,(byte)0x6f,(byte)0x70,(byte)0x79,(byte)0x01,(byte)0x00,(byte)0x2a,(byte)0x28,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x4f,(byte)0x62,(byte)0x6a,(byte)0x65,(byte)0x63,(byte)0x74,(byte)0x3b,(byte)0x49,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x4f,(byte)0x62,(byte)0x6a,(byte)0x65,(byte)0x63,(byte)0x74,(byte)0x3b,(byte)0x49,(byte)0x49,(byte)0x29,(byte)0x56,(byte)0x01,(byte)0x00,(byte)0x08,(byte)0x65,(byte)0x6e,(byte)0x64,(byte)0x73,(byte)0x57,(byte)0x69,(byte)0x74,(byte)0x68,(byte)0x01,(byte)0x00,(byte)0x15,(byte)0x28,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x3b,(byte)0x29,(byte)0x5a,(byte)0x07,(byte)0x00,(byte)0x6b,(byte)0x0c,(byte)0x00,(byte)0x6c,(byte)0x00,(byte)0x70,(byte)0x0c,(byte)0x00,(byte)0x2c,(byte)0x00,(byte)0x2d,(byte)0x01,(byte)0x00,(byte)0x22,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x69,(byte)0x6e,(byte)0x76,(byte)0x6f,(byte)0x6b,(byte)0x65,(byte)0x2f,(byte)0x4c,(byte)0x61,(byte)0x6d,(byte)0x62,(byte)0x64,(byte)0x61,(byte)0x4d,(byte)0x65,(byte)0x74,(byte)0x61,(byte)0x66,(byte)0x61,(byte)0x63,(byte)0x74,(byte)0x6f,(byte)0x72,(byte)0x79,(byte)0x01,(byte)0x00,(byte)0x0b,(byte)0x6d,(byte)0x65,(byte)0x74,(byte)0x61,(byte)0x66,(byte)0x61,(byte)0x63,(byte)0x74,(byte)0x6f,(byte)0x72,(byte)0x79,(byte)0x07,(byte)0x00,(byte)0x72,(byte)0x01,(byte)0x00,(byte)0x06,(byte)0x4c,(byte)0x6f,(byte)0x6f,(byte)0x6b,(byte)0x75,(byte)0x70,(byte)0x01,(byte)0x00,(byte)0x0c,(byte)0x49,(byte)0x6e,(byte)0x6e,(byte)0x65,(byte)0x72,(byte)0x43,(byte)0x6c,(byte)0x61,(byte)0x73,(byte)0x73,(byte)0x65,(byte)0x73,(byte)0x01,(byte)0x00,(byte)0xcc,(byte)0x28,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x69,(byte)0x6e,(byte)0x76,(byte)0x6f,(byte)0x6b,(byte)0x65,(byte)0x2f,(byte)0x4d,(byte)0x65,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x64,(byte)0x48,(byte)0x61,(byte)0x6e,(byte)0x64,(byte)0x6c,(byte)0x65,(byte)0x73,(byte)0x24,(byte)0x4c,(byte)0x6f,(byte)0x6f,(byte)0x6b,(byte)0x75,(byte)0x70,(byte)0x3b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x53,(byte)0x74,(byte)0x72,(byte)0x69,(byte)0x6e,(byte)0x67,(byte)0x3b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x69,(byte)0x6e,(byte)0x76,(byte)0x6f,(byte)0x6b,(byte)0x65,(byte)0x2f,(byte)0x4d,(byte)0x65,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x64,(byte)0x54,(byte)0x79,(byte)0x70,(byte)0x65,(byte)0x3b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x69,(byte)0x6e,(byte)0x76,(byte)0x6f,(byte)0x6b,(byte)0x65,(byte)0x2f,(byte)0x4d,(byte)0x65,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x64,(byte)0x54,(byte)0x79,(byte)0x70,(byte)0x65,(byte)0x3b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x69,(byte)0x6e,(byte)0x76,(byte)0x6f,(byte)0x6b,(byte)0x65,(byte)0x2f,(byte)0x4d,(byte)0x65,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x64,(byte)0x48,(byte)0x61,(byte)0x6e,(byte)0x64,(byte)0x6c,(byte)0x65,(byte)0x3b,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x69,(byte)0x6e,(byte)0x76,(byte)0x6f,(byte)0x6b,(byte)0x65,(byte)0x2f,(byte)0x4d,(byte)0x65,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x64,(byte)0x54,(byte)0x79,(byte)0x70,(byte)0x65,(byte)0x3b,(byte)0x29,(byte)0x4c,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x69,(byte)0x6e,(byte)0x76,(byte)0x6f,(byte)0x6b,(byte)0x65,(byte)0x2f,(byte)0x43,(byte)0x61,(byte)0x6c,(byte)0x6c,(byte)0x53,(byte)0x69,(byte)0x74,(byte)0x65,(byte)0x3b,(byte)0x07,(byte)0x00,(byte)0x73,(byte)0x01,(byte)0x00,(byte)0x25,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x69,(byte)0x6e,(byte)0x76,(byte)0x6f,(byte)0x6b,(byte)0x65,(byte)0x2f,(byte)0x4d,(byte)0x65,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x64,(byte)0x48,(byte)0x61,(byte)0x6e,(byte)0x64,(byte)0x6c,(byte)0x65,(byte)0x73,(byte)0x24,(byte)0x4c,(byte)0x6f,(byte)0x6f,(byte)0x6b,(byte)0x75,(byte)0x70,(byte)0x01,(byte)0x00,(byte)0x1e,(byte)0x6a,(byte)0x61,(byte)0x76,(byte)0x61,(byte)0x2f,(byte)0x6c,(byte)0x61,(byte)0x6e,(byte)0x67,(byte)0x2f,(byte)0x69,(byte)0x6e,(byte)0x76,(byte)0x6f,(byte)0x6b,(byte)0x65,(byte)0x2f,(byte)0x4d,(byte)0x65,(byte)0x74,(byte)0x68,(byte)0x6f,(byte)0x64,(byte)0x48,(byte)0x61,(byte)0x6e,(byte)0x64,(byte)0x6c,(byte)0x65,(byte)0x73,(byte)0x00,(byte)0x21,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x19,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x1a,(byte)0x00,(byte)0x1b,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x1c,(byte)0x00,(byte)0x1d,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x04,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x1e,(byte)0x00,(byte)0x1f,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x20,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x1d,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x05,(byte)0x2a,(byte)0xb7,(byte)0x00,(byte)0x01,(byte)0xb1,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x21,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x06,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0e,(byte)0x00,(byte)0x09,(byte)0x00,(byte)0x22,(byte)0x00,(byte)0x23,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x20,(byte)0x00,(byte)0x00,(byte)0x01,(byte)0x0e,(byte)0x00,(byte)0x05,(byte)0x00,(byte)0x06,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x91,(byte)0xbb,(byte)0x00,(byte)0x02,(byte)0x59,(byte)0xb7,(byte)0x00,(byte)0x03,(byte)0x4c,(byte)0x12,(byte)0x04,(byte)0xb8,(byte)0x00,(byte)0x05,(byte)0x4d,(byte)0x2c,(byte)0xc7,(byte)0x00,(byte)0x09,(byte)0x12,(byte)0x06,(byte)0xb8,(byte)0x00,(byte)0x05,(byte)0x4d,(byte)0x12,(byte)0x07,(byte)0xb8,(byte)0x00,(byte)0x05,(byte)0x4e,(byte)0x2d,(byte)0xc7,(byte)0x00,(byte)0x06,(byte)0x12,(byte)0x08,(byte)0x4e,(byte)0xbb,(byte)0x00,(byte)0x09,(byte)0x59,(byte)0xbb,(byte)0x00,(byte)0x09,(byte)0x59,(byte)0x2c,(byte)0xb7,(byte)0x00,(byte)0x0a,(byte)0x2d,(byte)0xb7,(byte)0x00,(byte)0x0b,(byte)0x3a,(byte)0x04,(byte)0x19,(byte)0x04,(byte)0xb6,(byte)0x00,(byte)0x0c,(byte)0x99,(byte)0x00,(byte)0x14,(byte)0x2b,(byte)0x19,(byte)0x04,(byte)0xba,(byte)0x00,(byte)0x0d,(byte)0x00,(byte)0x00,(byte)0xb6,(byte)0x00,(byte)0x0e,(byte)0xb5,(byte)0x00,(byte)0x0f,(byte)0xa7,(byte)0x00,(byte)0x0b,(byte)0x2b,(byte)0x03,(byte)0xbd,(byte)0x00,(byte)0x09,(byte)0xb5,(byte)0x00,(byte)0x0f,(byte)0x2b,(byte)0x2b,(byte)0xb4,(byte)0x00,(byte)0x0f,(byte)0xbe,(byte)0xbd,(byte)0x00,(byte)0x10,(byte)0xb5,(byte)0x00,(byte)0x11,(byte)0x03,(byte)0x36,(byte)0x05,(byte)0x15,(byte)0x05,(byte)0x2b,(byte)0xb4,(byte)0x00,(byte)0x0f,(byte)0xbe,(byte)0xa2,(byte)0x00,(byte)0x1d,(byte)0x2b,(byte)0xb4,(byte)0x00,(byte)0x11,(byte)0x15,(byte)0x05,(byte)0x2b,(byte)0xb4,(byte)0x00,(byte)0x0f,(byte)0x15,(byte)0x05,(byte)0x32,(byte)0xb6,(byte)0x00,(byte)0x12,(byte)0xb6,(byte)0x00,(byte)0x13,(byte)0x53,(byte)0x84,(byte)0x05,(byte)0x01,(byte)0xa7,(byte)0xff,(byte)0xdf,(byte)0x2b,(byte)0x2a,(byte)0xb6,(byte)0x00,(byte)0x14,(byte)0xb1,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x21,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x46,(byte)0x00,(byte)0x11,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x15,(byte)0x00,(byte)0x08,(byte)0x00,(byte)0x17,(byte)0x00,(byte)0x0e,(byte)0x00,(byte)0x18,(byte)0x00,(byte)0x12,(byte)0x00,(byte)0x1a,(byte)0x00,(byte)0x18,(byte)0x00,(byte)0x1d,(byte)0x00,(byte)0x1e,(byte)0x00,(byte)0x1e,(byte)0x00,(byte)0x22,(byte)0x00,(byte)0x20,(byte)0x00,(byte)0x25,(byte)0x00,(byte)0x23,(byte)0x00,(byte)0x37,(byte)0x00,(byte)0x25,(byte)0x00,(byte)0x3f,(byte)0x00,(byte)0x26,(byte)0x00,(byte)0x50,(byte)0x00,(byte)0x28,(byte)0x00,(byte)0x58,(byte)0x00,(byte)0x2b,(byte)0x00,(byte)0x64,(byte)0x00,(byte)0x2c,(byte)0x00,(byte)0x71,(byte)0x00,(byte)0x2d,(byte)0x00,(byte)0x85,(byte)0x00,(byte)0x2c,(byte)0x00,(byte)0x8b,(byte)0x00,(byte)0x2f,(byte)0x00,(byte)0x90,(byte)0x00,(byte)0x30,(byte)0x00,(byte)0x24,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x1f,(byte)0x00,(byte)0x06,(byte)0xfd,(byte)0x00,(byte)0x18,(byte)0x07,(byte)0x00,(byte)0x25,(byte)0x07,(byte)0x00,(byte)0x26,(byte)0xfc,(byte)0x00,(byte)0x0c,(byte)0x07,(byte)0x00,(byte)0x26,(byte)0xfc,(byte)0x00,(byte)0x2a,(byte)0x07,(byte)0x00,(byte)0x27,(byte)0x07,(byte)0xfc,(byte)0x00,(byte)0x0e,(byte)0x01,(byte)0xfa,(byte)0x00,(byte)0x23,(byte)0x00,(byte)0x28,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x04,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x29,(byte)0x00,(byte)0x04,(byte)0x00,(byte)0x2a,(byte)0x00,(byte)0x2b,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x20,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x4f,(byte)0x00,(byte)0x05,(byte)0x00,(byte)0x03,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x2b,(byte)0x2b,(byte)0xbe,(byte)0x2a,(byte)0xb4,(byte)0x00,(byte)0x11,(byte)0xbe,(byte)0x60,(byte)0xbd,(byte)0x00,(byte)0x10,(byte)0x4d,(byte)0x2b,(byte)0x03,(byte)0x2c,(byte)0x03,(byte)0x2b,(byte)0xbe,(byte)0xb8,(byte)0x00,(byte)0x15,(byte)0x2a,(byte)0xb4,(byte)0x00,(byte)0x11,(byte)0x03,(byte)0x2c,(byte)0x2b,(byte)0xbe,(byte)0x2a,(byte)0xb4,(byte)0x00,(byte)0x11,(byte)0xbe,(byte)0xb8,(byte)0x00,(byte)0x15,(byte)0x2a,(byte)0x2c,(byte)0xb7,(byte)0x00,(byte)0x16,(byte)0xb0,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x21,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x12,(byte)0x00,(byte)0x04,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x35,(byte)0x00,(byte)0x0c,(byte)0x00,(byte)0x37,(byte)0x00,(byte)0x15,(byte)0x00,(byte)0x38,(byte)0x00,(byte)0x25,(byte)0x00,(byte)0x39,(byte)0x00,(byte)0x28,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x04,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x29,(byte)0x10,(byte)0x0a,(byte)0x00,(byte)0x2c,(byte)0x00,(byte)0x2d,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x20,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x1f,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x07,(byte)0x2b,(byte)0x12,(byte)0x17,(byte)0xb6,(byte)0x00,(byte)0x18,(byte)0xac,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x21,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x06,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x26,(byte)0x00,(byte)0x03,(byte)0x00,(byte)0x2e,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x02,(byte)0x00,(byte)0x2f,(byte)0x00,(byte)0x6f,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0a,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x6d,(byte)0x00,(byte)0x71,(byte)0x00,(byte)0x6e,(byte)0x00,(byte)0x19,(byte)0x00,(byte)0x3c,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x0c,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x3d,(byte)0x00,(byte)0x03,(byte)0x00,(byte)0x3e,(byte)0x00,(byte)0x3f,(byte)0x00,(byte)0x3e};

    /**
     * 得到编译结果
     * @param javaString  需要编译的java 代码
     * @param myLauncherName 名称
     * @param springBootLoaderJarPath 依赖路径
     * @param custom 是否开启自定义
     * @return 编译结果
     * @throws URISyntaxException URI 异常
     */
    public static byte[] getMainClassBytes(String javaString,String myLauncherName,String springBootLoaderJarPath,Boolean custom) throws URISyntaxException {
        if (!custom){
            return DEFAULT_MAIN_CLASS;
        }
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        StandardJavaFileManager standardFileManager = compiler.getStandardFileManager(null, null, null);
        ClassJavaFileManager classJavaFileManager = new ClassJavaFileManager(standardFileManager);
        StringObject stringObject = new StringObject(new URI(myLauncherName + ".java"), JavaFileObject.Kind.SOURCE, javaString);
        List<String> options = new ArrayList<>();
        options.add("-classpath");
        // 此处需要获取spring-boot-loader 包的实际位置
        options.add(springBootLoaderJarPath);
        JavaCompiler.CompilationTask task = compiler.getTask(null, classJavaFileManager, null, options, null, Arrays.asList(stringObject));
        if (task.call()) {
            ClassJavaFileObject javaFileObject = classJavaFileManager.getClassJavaFileObject();
            return javaFileObject.getBytes();
        } else {
            throw new RuntimeException("");
        }
    }
}
